Chapter 1 PCの仕組みからアセンブラ入門まで
from 30日でできる!OS自作入門
Chapter 1 PCの仕組みからアセンブラ入門まで
バイナリエディタでファイルを作る
本に書いてあるとおりにバイナリを手打ちする
この本は色々説明した後に「というのをやっておきました」というような説明スタイルなので説明を上からやっていくと愚直に全部やることになる
30日でできる!OS自作入門の環境構築をする
バイナリをQEMUでブートする(Linuxだと本文そのままでは動かないので直接QEMUを使った)
30日でできる!OS自作入門の環境構築をする#5e3eddb63f442500001e2230の事情のため、3日目ぐらいまでは本の通りのコマンドでは動かせなさそう
https://gyazo.com/c67e778d585a17bc9d9be241939ca278
Winでもやってみた
https://gyazo.com/af2ab182463f4b014c7eafbb049fb85a
i386
なんか動いた。なにこれ?
CPUは電気信号として渡された0/1を処理する
10進数は2進数に変換できる
文字も文字コードという番号に変換できるので扱える
16進数
ペンがあれば小説が書ける。バイナリエディタがあればプログラムが書ける……書きやすいとはいってない!
アセンブラ
NASKでアセンブラ言語で書かれたコード(helloos.nas)をassembleする
..¥z_tools¥nask.exe helloos.nas helloos.img
asm.batでこれが動く
書籍では、次の手順になる
1. NASKでアセンブラをassembleしてimage作成
2. RUNでqemuをつかってimageを実行
しかし、macOSでやっていると、このタイミングではNASKが動かないのでNASMを使う
参考:https://qiita.com/noanoa07/items/8828c37c2e286522c7ee#2-アセンブラ-nasm
brew install nasm
NASM version 2.14.02 compiled on Sep 28 2019
code:helloos1
nasm helloos.nas -o helloos.img
まとめると、macOSでは次の手順になる(Linuxでもこうなるはず)
1. NASMでアセンブラをassembleしてimage作成
nasm helloos.nas -o helloos.img
2. qemu-system-i386でimageを実行
qemu-system-i386 helloos.img
アセンブラの基礎
DB命令
data byte。1 byteだけ直接書く
DB "HELLOIPL"のように文字列を指定することも可能
DW命令
data word
アセンブラの世界では1 wordは16bit
アーキテクチャによる。MIPSでは1 wordは32bitkadoyau.icon
DD命令
data double-word
32bit
RESB命令
reserve byte。そのバイトだけ予約する。
NASKでは予約部は0x00で埋められる
ORG命令
どこに読み込むか
$が読み込まれる予定のメモリ番地になる
JMP命令
Cのgoto
MOV命令
ADD命令
ADD SI, 1はSI = SI + 1
CMP命令
CMP AL,0はif(AL == 0)
JE命令
JMPの一種
CMPの比較が等しければジャンプする
INT命令
HLT命令
halt
CPUを待機状態にする
なにもしないならHLTをしておく
無限ループでCPU負荷が上がってしまうのを防ぐ
helloos2/helloos.nasはSJIS
UTF-8で化ける
FAT12 format
hello-osはこれを採用
ブートセクタ
最初のセクタのこと。PCはこれを読んで起動に必要な情報があるか確認する
セクタは読み取りの最小単位
FDでは1セクタ512 byte。2280セクタ
IPL
initial program loader
ブートセクタにOSを読み込むプログラム